import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

/// 系统通用工具类
/// 提供常用的系统功能，如Toast提示、剪贴板操作等
class SystemUtil {
  /// 私有构造函数，防止实例化
  SystemUtil._();

  // --------- 剪贴板相关 --------- //

  /// 获取剪贴板文本内容
  ///
  /// 返回剪贴板中的文本，如果获取失败则返回null
  static Future<String?> getClipboardText() async {
    final ClipboardData? data = await Clipboard.getData(Clipboard.kTextPlain);
    return data?.text;
  }

  /// 设置剪贴板文本内容
  ///
  /// [text] 要设置到剪贴板的文本
  static Future<void> setClipboardText(String text) async {
    await Clipboard.setData(ClipboardData(text: text));
  }

  /// 复制文本到剪贴板并显示提示
  ///
  /// [text] 要复制的文本
  /// [message] 提示消息，默认为"已复制到剪贴板"
  static Future<void> copyToClipboardWithToast(
    String text, {
    String message = "已复制到剪贴板",
  }) async {
    await setClipboardText(text);
  }

  // --------- 对话框相关 --------- //

  /// 显示普通对话框
  ///
  /// [context] 上下文
  /// [title] 标题
  /// [content] 内容
  /// [confirmText] 确认按钮文本
  /// [cancelText] 取消按钮文本，如果为null则不显示取消按钮
  /// [onConfirm] 确认回调
  /// [onCancel] 取消回调
  static Future<void> showAlertDialog({
    required BuildContext context,
    required String title,
    required String content,
    String confirmText = "确定",
    String? cancelText,
    VoidCallback? onConfirm,
    VoidCallback? onCancel,
  }) async {
    return showDialog<void>(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text(title),
          content: SingleChildScrollView(
            child: Text(content),
          ),
          actions: <Widget>[
            if (cancelText != null)
              TextButton(
                child: Text(cancelText),
                onPressed: () {
                  Navigator.of(context).pop();
                  onCancel?.call();
                },
              ),
            TextButton(
              child: Text(confirmText),
              onPressed: () {
                Navigator.of(context).pop();
                onConfirm?.call();
              },
            ),
          ],
        );
      },
    );
  }

  // --------- 键盘相关 --------- //

  /// 隐藏键盘
  ///
  /// [context] 上下文
  static void hideKeyboard(BuildContext context) {
    FocusScope.of(context).unfocus();
  }

  /// 显示键盘
  ///
  /// [focusNode] 焦点节点
  static void showKeyboard(FocusNode focusNode) {
    focusNode.requestFocus();
  }

  // --------- 系统主题相关 --------- //

  /// 获取系统主题亮度
  ///
  /// [context] 上下文
  static Brightness getSystemBrightness(BuildContext context) {
    return MediaQuery.of(context).platformBrightness;
  }

  /// 判断是否为暗黑模式
  ///
  /// [context] 上下文
  static bool isDarkMode(BuildContext context) {
    return getSystemBrightness(context) == Brightness.dark;
  }
}
